﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using LibreriaGestion;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;
using System.Configuration;

namespace ConceptosBasicos
{
	class Program
	{
		static void Main(string[] args)
		{
			IUnityContainer contenedor = configuracionManual();
			//IUnityContainer contenedor = configuracionFichero();
			
			var generadorInforme = contenedor.Resolve<IGeneradorInforme>();

			generadorInforme.muestraInforme();

			Console.ReadLine();
		}

		private static IUnityContainer configuracionFichero()
		{
			IUnityContainer contenedor = new UnityContainer();

			ExeConfigurationFileMap configMapeada = new ExeConfigurationFileMap();
			configMapeada.ExeConfigFilename = "ConfiguracionUnity.xml";

			Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMapeada, ConfigurationUserLevel.None);

			UnityConfigurationSection configuracionUnity = (UnityConfigurationSection)config.GetSection("unity");
			configuracionUnity.Containers["Contenedor"].Configure(contenedor);

			return contenedor;
		}

		private static IUnityContainer configuracionManual()
		{
			IUnityContainer contenedor = new UnityContainer();
			contenedor.RegisterType<IGestorPedidos, GestorPedidos>();
			contenedor.RegisterType<IGestorStocks, GestorStocks>();
			contenedor.RegisterType<IGestorAlmacen, GestorAlmacen>();
			contenedor.RegisterType<IVisorInforme, VisorFichero>();
			contenedor.RegisterType<IVisorInforme, VisorFichero>("Fichero");
			contenedor.RegisterType<IVisorInforme, VisorConsola>("Consola");
			contenedor.RegisterType<IGeneradorInforme, GeneradorInformesDetallado>();
			contenedor.RegisterType<IGeneradorInforme, GeneradorInformesDetallado>("Detallado");
			contenedor.RegisterType<IGeneradorInforme, GeneradorInformesSimple>("Simple");
			return contenedor;
		}
	}
}
